<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel="stylesheet" href="layui/css/layui.css" media="all">
    <!-- 注意：如果你直接复制所有代码到本地，上述css路径需要改成你本地的 -->
</head>
<body>

<table class="layui-hide" id="test" lay-filter="test"></table>

<script type="text/html" id="toolbarDemo">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据</button>
        <button class="layui-btn layui-btn-sm" lay-event="getCheckLength">获取选中数目</button>
        <button class="layui-btn layui-btn-sm" lay-event="isAll">验证是否全选</button>
    </div>
</script>

<script type="text/html" id="barDemo">
    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>

<script type="text/html" id="img">
    <!-- 1、两个花括号{}，类似双向绑定，{field: 'fileName';
    2、d表示当前对象；
    3、注意路径images。-->
    <img src="images/{{d.fileName}}"/>
</script>

<script src="layui/layui.js" charset="utf-8"></script>
<!-- 注意：如果你直接复制所有代码到本地，上述js路径需要改成你本地的 -->

<script>
    layui.use('table', function () {
        var table = layui.table;

        //温馨提示：默认由前端自动合计当前行数据。从 layui 2.5.6 开始： 若接口直接返回了合计行数据，则优先读取接口合计行数据。
        //详见：https://www.layui.com/doc/modules/table.html#totalRow
        table.render({
            elem: '#test'
            , url: '/list'
            , toolbar: '#toolbarDemo'
            , title: '用户数据表'
            , totalRow: true  // 在表格下面合计（计算）总数
            , cols: [
                [
                    {type: 'checkbox', fixed: 'left'}
                    , {field: 'id', title: '商品ID', width: 150, fixed: 'left', sort: true, totalRowText: '合计'}
                    , {field: 'name', title: '商品名称', width: 150}
                    , {field: 'description', title: '商品描述', width: 150}
                    , {field: 'price', title: '商品价格', width: 150, sort: true, totalRow: true}
                    , {field: 'stock', title: '商品库存', width: 150, sort: true, totalRow: true}
                    , {field: 'categorylevelone', title: '一级分类', width: 150}
                    , {field: 'categoryleveltwo', title: '二级分类', width: 150}
                    , {field: 'categorylevelthree', title: '三级分类', width: 150}
                    , {field: 'fileName', title: '商品图片', templet: '#img'}  //和上文的id="img"对应（添加标签元素）
                    , {fixed: 'right', title: '操作', toolbar: '#barDemo', width: 150}
                ]
            ]
            , page: true
        });

        //工具栏事件
        table.on('toolbar(test)', function (obj) {
            var checkStatus = table.checkStatus(obj.config.id);
            switch (obj.event) {
                case 'getCheckData':
                    var data = checkStatus.data;
                    layer.alert(JSON.stringify(data));
                    break;
                case 'getCheckLength':
                    var data = checkStatus.data;
                    layer.msg('选中了：' + data.length + ' 个');
                    break;
                case 'isAll':
                    layer.msg(checkStatus.isAll ? '全选' : '未全选')
                    break;
            }
            ;
        });

        //监听工具条
        table.on('tool(test)', function (obj) {
            var data = obj.data;
            if (obj.event === 'del') {
                layer.confirm('真的删除行么', function (index) {
                    obj.del();
                    layer.close(index);
                });
            } else if (obj.event === 'edit') {
                layer.alert('编辑行：<br>' + JSON.stringify(data))
            }
        });

    });
</script>

</body>
</html>